package com.zm.oes.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zm.oes.entity.Teacher;
import org.apache.ibatis.annotations.*;

@Mapper
public interface TeacherMapper {

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 查询所有教师记录，不带任何条件
     * 方法的参数为一个分页对象 Page，用于分页查询，并指定了返回结果为 IPage<Teacher> 类型，表示带分页信息的教师记录列表
     */
    @Select("select * from teacher")
    IPage<Teacher>  findAll(Page page);

//    @Select("select * from teacher")
//    public List<Teacher> findAll();

    /**
     * 使用 @Select 注解标记，表示这是一个查询操作
     * 根据教师ID查询对应的教师记录
     * 方法的参数为一个整数 teacherId，表示待查询教师的ID
     * 返回类型为 Teacher 对象，表示查询到的教师记录
     */
    @Select("select * from teacher where teacherId = #{teacherId}")
    public Teacher findById(Integer teacherId);

    /**
     * 使用 @Delete 注解标记，表示这是一个删除操作
     * 根据教师ID删除对应的教师记录
     * 方法的参数为一个整数 teacherId，表示待删除教师的ID
     * 返回类型为操作结果的整数，通常用于表示受影响的行数
     */
    @Delete("delete from teacher where teacherId = #{teacherId}")
    public int deleteById(Integer teacherId);

    /**
     * 使用 @Update 注解标记，表示这是一个更新操作
     * 根据教师ID更新对应的教师记录的各项信息，包括姓名、性别、电话、邮箱、密码、身份证号、角色、类型和学院
     * 方法的参数为一个教师对象，包含了待更新的教师信息
     * 返回类型为操作结果的整数，通常用于表示受影响的行数
     */
    @Update("update teacher set teacherName = #{teacherName},sex = #{sex}," +
            "tel = #{tel}, email = #{email},pwd = #{pwd},cardId = #{cardId}," +
            "role = #{role},institute = #{institute},type = #{type} where teacherId = #{teacherId}")
    public int update(Teacher teacher);

    /**
     * 使用 @Insert 注解标记，表示这是一个插入操作
     * 向教师表插入新的教师记录，包括教师姓名、性别、电话、邮箱、密码、身份证号、角色、类型和学院
     * 方法的参数为一个教师对象，包含了待插入的教师信息
     * 返回类型为操作结果的整数，通常用于表示受影响的行数，并通过 @Options 注解配置了自动生成的键，确保了插入记录后能够获取到自动生成的教师ID
     */
    @Options(useGeneratedKeys = true,keyProperty = "teacherId")
    @Insert("insert into teacher(teacherName,sex,tel,email,pwd,cardId,role,type,institute) " +
            "values(#{teacherName},#{sex},#{tel},#{email},#{pwd},#{cardId},#{role},#{type},#{institute})")
    public int add(Teacher teacher);

}
